package listbyorder.access001_100.test65;

/**
 * @author code_yc
 * @version 1.0
 * @date 2020/6/3 11:09
 */
public class Solution1 {

    // 方法一；discussion解法
    // 首先确保能找出所有不能转化成10进制的情况
    // 1 符号（+/-）出现的位置不在第一位，或者e的后面
    // 2 小数点出现在第一个位置、
    // 3 小数点出现在e的后面
    // 4 e出现在第一个位置
    public boolean isNumber(String s) {

        s = s.trim();  // 首先将字符串两边的空白都给去除

        // 设置多个标志位
        boolean pointSeen = false;  // 小数表示（遇到了小数点就变成true）
        boolean eSeen = false;   // e符号标志，遇到e元素就变为true
        boolean numberSeen = false;  // 一旦遇到数字就变成true
        boolean numberAfterE = true;  // 遇到e就变成false
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                numberSeen = true;
                numberAfterE = true;
            } else if (s.charAt(i) == '.') {
                if (eSeen || pointSeen) {   // 这里不可以有两个小数点，e后面也不可能有小数点
                    return false;
                }
                pointSeen = true;
            } else if (s.charAt(i) == 'e') {
                if (eSeen || !numberSeen) {   //如果之前出现过e或者e之前没有数字，则直接false
                    return false;
                }
                numberAfterE = false;
                eSeen = true;
            } else if (s.charAt(i) == '+' || s.charAt(i) == '-') {
                if (i != 0 && s.charAt(i - 1) != 'e') {
                    return false;
                }
            } else {
                return false;
            }
        }
        return numberSeen && numberAfterE;

    }
}
